package com.tangerine.bd;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import android.database.Cursor;
import android.util.Log;
import com.tangerine.entidades.Preferencia;

public class DbHandlerPreferencia{
	private static DbHandler bd;
	private static final String TABLE_PREFERENCIA = "PREFERENCIA";
	// Table PREFERENCIA
	private static final int CAMPO_ID_PREFERENCIA	= 0;
	private static final int CAMPO_ID_PERFIL 		= 1;
	private static final int CAMPO_DESCRIPCION		= 2;
	private static final int CAMPO_VALOR_DISTANCIA	= 3;
	private static final int CAMPO_VALOR_TIEMPO		= 4;
	
	static final String TAG ="DbHandlerPreferencia";

	public DbHandlerPreferencia() {
		bd = DbHandler.getInstance();
	}
	
	public List<Preferencia> cargarPreferencia() throws SQLException {		
		List<Preferencia> list = new ArrayList<Preferencia>();
		
		String selectQuery = "SELECT * FROM " + TABLE_PREFERENCIA;		
		Cursor cursor = bd.ejecutarConsulta(selectQuery); 
		
		// looping through all rows and adding to list
		if (cursor.moveToFirst()) {
			do {
				Preferencia auxPreferencia = new Preferencia();
				
				auxPreferencia.setIdPreferencia(Integer.parseInt(cursor.getString(CAMPO_ID_PREFERENCIA)));
				auxPreferencia.setIdPerfil(Integer.parseInt(cursor.getString(CAMPO_ID_PERFIL)));
				auxPreferencia.setSzDescripcion(cursor.getString(CAMPO_DESCRIPCION));
				auxPreferencia.setValorDistancia(Float.parseFloat(cursor.getString(CAMPO_VALOR_DISTANCIA)));
				auxPreferencia.setValorTiempo(Integer.parseInt(cursor.getString(CAMPO_VALOR_TIEMPO)));
				
				list.add(auxPreferencia);
			} while (cursor.moveToNext());
		}
		
		cursor.close();

		return list;
	}
	
	public void insertarPreferencia(Preferencia auxPreferencia) throws SQLException {
		String insertRegister = "INSERT INTO " + TABLE_PREFERENCIA + " (ID_PREFERENCIA, ID_PERFIL, DESCRIPCION, VALOR_DISTANCIA, VALOR_TIEMPO) VALUES(" +
								Integer.toString(auxPreferencia.getIdPreferencia()) + ", " + //ID_PREFERENCIA
								Integer.toString(auxPreferencia.getIdPerfil()) + ", \"" + 	 //ID_PERFIL
								auxPreferencia.getSzDescripcion() + "\", " + 				 //DESCRIPCION
								Float.toString(auxPreferencia.getValorDistancia()) + ", " +  //VALOR_DISTANCIA
								Float.toString(auxPreferencia.getValorTiempo()) + ")"; 		 //VALOR_TIEMPO
		
		bd.ejecutarInsert(insertRegister);
	}
	
	public int obtenerMaximoIdPreferencia() throws SQLException {
		int iMaxIdPreferencia = 0;
		String selectQuery = "SELECT IFNULL(MAX(ID_PREFERENCIA), 0) FROM " + TABLE_PREFERENCIA;
		
		Cursor cursor = bd.ejecutarConsulta(selectQuery); 
		
		if(cursor.moveToFirst()) {
			do {
				iMaxIdPreferencia = Integer.parseInt(cursor.getString(0));
			} while (cursor.moveToNext());
		}
		return iMaxIdPreferencia;
	}
	
	//return 0 - TABLE empty.
	//return 1 - 
	public int existePreferencia(float fValorDistancia, int iValorTiempo) throws SQLException {
		int iCantReg = 0;

		String selectQuery = "SELECT COUNT(1) FROM " + TABLE_PREFERENCIA + 
				" WHERE VALOR_DISTANCIA = " + String.valueOf(fValorDistancia) +
				" AND VALOR_TIEMPO = " + String.valueOf(iValorTiempo);
		
		Log.d(TAG, selectQuery);	
		Cursor cursor = bd.ejecutarConsulta(selectQuery); 

		if(cursor.moveToFirst()) {
			do {
				iCantReg = Integer.parseInt(cursor.getString(0));
			} while (cursor.moveToNext());
		}
		
		cursor.close();
		
		if(iCantReg == 0)
			return 0;
		else
			return 1;			
	}
	
	public void eliminarPreferencia(Preferencia auxPreferencia) throws SQLException {
		/*String deleteRegister = "DELETE FROM " + TABLE_PREFERENCIA + " WHERE ID_PREFERENCIA = " 
				+ Integer.toString(auxPreferencia.getIdPreferencia());*/
		
		String deleteRegister = "DELETE FROM " + TABLE_PREFERENCIA + " WHERE ID_PERFIL = " 
				+ Integer.toString(auxPreferencia.getIdPerfil());
		
		bd.ejecutarDelete(deleteRegister);
	}
	
	public float obtenerDistancia(int iIdPerfil) throws SQLException {
		float fValorDistancia = 0;

		String selectQuery = "SELECT VALOR_DISTANCIA FROM " + TABLE_PREFERENCIA + 
				" WHERE ID_PERFIL = "+String.valueOf(iIdPerfil);
		
		Log.d(TAG, selectQuery);	
		Cursor cursor = bd.ejecutarConsulta(selectQuery); 

		if(cursor.moveToFirst()) {
			do {
				fValorDistancia = Float.parseFloat(cursor.getString(0));
			} while (cursor.moveToNext());
		}
		
		cursor.close();
		return fValorDistancia;
	}
	
	public int obtenerTiempo(int iIdPerfil) throws SQLException {
		int iValorTiempo = 0;

		String selectQuery = "SELECT VALOR_TIEMPO FROM " + TABLE_PREFERENCIA + 
				" WHERE ID_PERFIL = "+String.valueOf(iIdPerfil);
		
		Log.d(TAG, selectQuery);	
		Cursor cursor = bd.ejecutarConsulta(selectQuery); 

		if(cursor.moveToFirst()) {
			do {
				iValorTiempo = Integer.parseInt(cursor.getString(0));
			} while (cursor.moveToNext());
		}
		
		cursor.close();
		return iValorTiempo;
	}
}